<!doctype html>
<html>
  <head>
    <title>
      Biquad Tailtime Computation (crbug.com/829349)
    </title>
    <script src="../../resources/testharness.js"></script>
    <script src="../../resources/testharnessreport.js"></script>
    <script src="../resources/audit-util.js"></script>
    <script src="../resources/audit.js"></script>
  </head>
  <body>
    <script>
      let audit = Audit.createTaskRunner();

      // Sample rate used in testing crbug.com/829349.  Use the same rate to
      // make sure the coefficients have the same values.  (The actual
      // coefficients depend on the sample rate, so keep it the same for
      // consistency with the repro case.)
      let sampleRate = 44100;

      audit.define('Peaking filter tailtime', (task, should) => {
        // Short length
        let context =
            new OfflineAudioContext({length: 1024, sampleRate: sampleRate});
        let src = new OscillatorNode(context);

        // This particular filter is one of the filters used in the repro case
        // from crbug.com/829349.  In a debug build, this causes a DCHECK crash
        // because a value as NaN.  Just use this filter and verify that it
        // works and doesn't crash in a debug build.
        let f = new BiquadFilterNode(
            context,
            {type: 'peaking', frequency: 15000, Q: 0.2, gain: -5, detune: 0});

        src.connect(f).connect(context.destination);

        src.start();
        context.startRendering()
            .then(audioBuffer => {
              // Just verify that the output is not all zeroes.  The actual test
              // is that we don't have a DCHECK failure in a debug build.
              should(audioBuffer.getChannelData(0), 'Filter output')
                  .notBeConstantValueOf(0);
            })
            .then(() => task.done());
      });

      audit.run();
    </script>
  </body>
</html>
